BOM

BOM

  • 理解 window 对象——BOM 的核心
  • 控制窗口、框架和弹出窗口
  • 利用 location 对象中的页面信息
  • 使用 navigator 对象了解浏览器

    window对象

    BOM 的核心对象是window,它表示浏览器的一个实例。在浏览器中,window 对象有双重角色, 它既是通过 JavaScript 访问浏览器窗口的一个接口,又是 ECMAScript 规定的 Global 对象。这意味着在网页中定义的任何一个对象、变量和函数,都以 window 作为其 Global 对象,因此有权访问 parseInt()等方法。

    location 对象

    location 对象是很特别的一个对象,因为它既是 window 对象的属性,也是 document 对象的属性;换句话说,window.location 和 document.location 引用的是同一个对象。location对象的用处不只表现在它保存着当前文档的信息,还表现在它将 URL解析为独立的片段,让开发人员可以通过不同的属性访问这些片段。
属 性 名 例 子 说 明
hash “#contents” 返回URL中的hash(#号后跟零或多个字符),如果URL 中不包含散列,则返回空字符串
host “www.wrox.com:80” 返回服务器名称和端口号(如果有)
hostname “www.wrox.com” 返回不带端口的服务器名称
href http://www.wrox.com 返回当前加载页面的完整URL。而location对象的toString()方法也返回这个值
pathname “/WileyCDA/“ 返回URL中的目录和(或)文件名
port “8080” 返回URL中指定的端口号。如果URL中不包含端口号,则 这个属性返回空字符串
protocol “http:” 返回页面使用的协议。通常是http:或https:
search “?q=javascript” 返回URL的查询字符串。这个字符串以问号开头

查询字符串参数

可以像下面这样创建一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function getQueryStringArgs(){
//取得查询字符串并去掉开头的问号
var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
//保存数据的对象
args = {},
//取得每一项
items = qs.length ? qs.split("&") : [],
item = null,
name = null,
value = null,
//在 for 循环中使用
i = 0,
len = items.length;
//逐个将每一项添加到 args 对象中
for (i=0; i < len; i++){
item = items[i].split("=");
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}

1
2
3
4
// 假设查询字符串是?q=javascript&num=10
var args = getQueryStringArgs();
alert(args["q"]); // "javascript"
alert(args["num"]); // "10"

位置操作

使用 replace()方法。这个方法只接受一个参数,即要导航到的 URL;结果虽然会导致浏览器位置改变,但不会在历史记录中生成新记录。在调用 replace()方法之后,用户不能回到前一个页面。

与位置有关的最后一个方法是 reload(),作用是重新加载当前显示的页面。如果调用 reload() 时不传递任何参数,页面就会以最有效的方式重新加载。也就是说,如果页面自上次请求以来并没有改 变过,页面就会从浏览器缓存中重新加载。如果要强制从服务器重新加载,则需要像下面这样为该方法 传递参数 true。

1
2
location.reload(); //重新加载(有可能从缓存中加载)
location.reload(true); //重新加载(从服务器重新加载)

navigator 对象,已经成为识别客户端浏览器的事实标准。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function getBrowserInfo(){
var agent = navigator.userAgent.toLowerCase() ;
var regStr_ie = /msie [\d.]+;/gi ;
var regStr_ff = /firefox\/[\d.]+/gi
var regStr_chrome = /chrome\/[\d.]+/gi ;
var regStr_saf = /safari\/[\d.]+/gi ;
//IE
if(agent.indexOf("msie") > 0){
return agent.match(regStr_ie) ;
}
//firefox
if(agent.indexOf("firefox") > 0){
return agent.match(regStr_ff) ;
}
//Chrome
if(agent.indexOf("chrome") > 0){
return agent.match(regStr_chrome) ;
}
//Safari
if(agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0){
return agent.match(regStr_saf) ;
}
}
// 然后获取版本号
var browser = getBrowserInfo() ;
//alert(browser);
var verinfo = (browser+"").replace(/[^0-9.]/ig,"");
// 获取浏览器
var browserName = (browser+"").replace(/[^a-z]/ig,"");

screen对象(略)

JavaScript 中有几个对象在编程中用处不大,而 screen 对象就是其中之一。screen 对象基本上只 用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等。每个浏览器 中的 screen 对象都包含着各不相同的属性。

history对象

history 对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。因为 history 是 window 对象的属性,因此每个浏览器窗口、每个标签页乃至每个框架,都有自己的 history 对象与特定的 window 对象关联。出于安全方面的考虑,开发人员无法得知用户浏览过的 URL。不过,借由用户访问 过的页面列表,同样可以在不知道实际 URL 的情况下实现后退和前进。

使用 go()方法可以在用户的历史记录中任意跳转,可以向后也可以向前。这个方法接受一个参数, 表示向后或向前跳转的页面数的一个整数值。负数表示向后跳转(类似于单击浏览器的“后退”按钮), 正数表示向前跳转(类似于单击浏览器的“前进”按钮)。

1
2
3
//后退一页 history.go(-1);
//前进一页 history.go(1);
//前进两页 history.go(2);

小结

浏览器对象模型(BOM)以 window 对象为依托,表示浏览器窗口以及页面可见区域。同时,window 对象还是 ECMAScript 中的 Global 对象,因而所有全局变量和函数都是它的属性,且所有原生的构造 函数及其他函数也都存在于它的命名空间下.

  • 在使用框架时,每个框架都有自己的 window 对象以及所有原生构造函数及其他函数的副本。 每个框架都保存在 frames 集合中,可以通过位置或通过名称来访问。
  • 有一些窗口指针,可以用来引用其他框架,包括父框架。
  • top 对象始终指向最外围的框架,也就是整个浏览器窗口。
  • parent 对象表示包含当前框架的框架,而 self 对象则回指 window。
  • 使用 location 对象可以通过编程方式来访问浏览器的导航系统。设置相应的属性,可以逐段
    或整体性地修改浏览器的 URL。
  • 调用 replace()方法可以导航到一个新 URL,同时该 URL 会替换浏览器历史记录中当前显示
    的页面。
  • navigator 对象提供了与浏览器有关的信息。到底提供哪些信息,很大程度上取决于用户的浏
    览器;不过,也有一些公共的属性(如 userAgent)存在于所有浏览器中。
文章目录
  1. 1. BOM
    1. 1.1. window对象
    2. 1.2. location 对象
      1. 1.2.1. 查询字符串参数
      2. 1.2.2. 位置操作
    3. 1.3. navigator对象
    4. 1.4. screen对象(略)
    5. 1.5. history对象
  2. 2. 小结
|